#高级数据管理
num <- c(1,2,3,4,5,6,7)

#求长度
n <- length(num)

#求均值(一)
mean(num)
#求均值(二)
meanNum <- sum(num) / m
meanNum

#求标准差(一)
sd(num)

#求标准差(二)
css <- sum((num - meanNum) ** 2)
sdx <- sqrt(css/(n - 1))
sdx

#一些常用的数学函数
x <- 3.6
y <- abs(x)
z <- sqrt(x)
ceiling(x)
floor(x)
round(4.53, 1)

#指定列进行均值为0、标准差为1的标准化
age <- c(12,34,21,13,31)
newdata <- scale(age)
newdata
#对每一列进行任意均值和标准差的标准化
newdata1 <- scale(age) * 10 + 50
newdata1

#正态分布
x <- pretty(c(-3, 3), 30)
y <- dnorm(x)
plot(x,y,
    type = 'l',
    xlab = 'NormalDeviate',
    ylab = 'Density',
    yaxs = 'i'
)
#位于z=1.96左侧的标准正态曲线下方面积是多少?
pnorm(1.96)
#均值为500，标准差为100的正态分布的0.9分位点值为多少?
qnorm(0.9, mean = 500, sd = 100)
#生成50个均值为50，标准差为10的正态随机数
rnorm(50, mean = 50, sd = 10)

#设定随机种子(函数内的值随便写,目的是为了让随机数保持不变)
runif(5)
#设置后随机值就不变了
set.seed(123)
runif(5)

#概率函数 生成多元正态数据
#这里用到MASS库的m
install.packages('MASS')
library('MASS')
set.seed(123)
mean <- c(230.7, 140.7, 3.6)
sigma <- matrix(c(15360.8, 6721.2, -47.1,
                  6721.2, 4700.9, -16.5,
                  -47.1, -16.5, 0.3), nrow = 3, ncol = 3)
mydata <- mvrnorm(500, mean, sigma)
mydata
mydata <- as.data.frame(mydata)
names(mydata) <- c('y','x1','x2')
mydata
dim(mydata)
head(mydata, n = 10)

#字符出路函数
x <- c('abc', 'df', 'fghijk')
length(x)
#计算字符数量
nchar(x[3])
#提取或替换一个字符向量中的字串
x <- 'abcdefg'
substr(x, 2, 4)
substr(x, 2, 4) <- '22222'

#fixed = TRUE 单纯字符串，fixed=FALSE表示正则表达式
grep('A', c('a', 'b', 'abd', 'A'), fixed = TRUE)

#这个sub表示在最后那个字符串中找到第一个字符，替换为第二个
sub('^H', ';', 'Hello There')
strsplit('分隔符:123', ':')
paste('x', 1:3, sep = '_')

toupper('abc') #全大写
tolower('AFHJDHFKJA') #全小写

#cat用于连接对象然后输出
firstname <- c('Hane')
cat('Hello', firstname, '\n')
name <- 'Bob'
cat('Hello', name, '\b.\n', 'Isn\'t R', '\t', 'GREAT?\n')

mydata <- matrix(rnorm(30), nrow = 6)
mydata
#计算每一行均值
apply(mydata, 1, mean)
#计算每一列均值
apply(mydata, 2, mean)
#计算每一列结尾均值
apply(mydata, 1, mean, trim = 0.2)

#表格中的数据框
Student <- c("John Davis", "Angela williams", 
             "Bullwinkle Moose", "David Jones",
             "Janice Markhammer", "Cheryl Cushing",
             "Reuven Ytzrhak","Greg Knox",
             "Joel England", "Mary Rayburn"
)
Math <- c(502, 600, 412, 358, 495, 512, 410, 625, 573, 522)
Science <- c(95, 99, 80, 82, 75, 85, 80, 95, 89, 86)
English <- c(25, 22, 18, 15, 20, 18, 15, 30, 27, 18)
roster <- data.frame(Student, Math, Science, English)
roster
#数据处理
meanscore <- apply(roster[2:4], 2, mean) #求平均数
std <- scale(roster[2:4]) #求标准差
score <- apply(std, 1, mean) #依据均值和标准差创建一个分数
score
roster <- cbind(roster, score) #合并到表格里
roster
quantile <- quantile(score, c(.2, .4, .6, .8)) #对分数评级(求分位数)
quantile
roster$grade[score >= quantile[4]] <- 'A'
roster$grade[score < quantile[4] & score >= quantile[3]] <- 'B'
roster$grade[score < quantile[3] & score >= quantile[2]] <- 'C'
roster$grade[score < quantile[2] & score >= quantile[1]] <- 'D'
roster$grade[score < quantile[1]] <- 'E'
roster
